(function (jQuery) {

    /*
     * 字符串相关操作
     */
    $.tableUtils = {


        resetItem: function (tableDom,itemDom,isEnableItem) {
            
            if (isEnableItem) {
                $.tableUtils.enableItem(tableDom, itemDom);
                return;
            }
            $.tableUtils.disableItem(tableDom, itemDom);

        },
        
        /**
         * 检查选择的数量,默认
         * @param dom ,选择行的数量
         */
        checkSelectQuantityDefault: function (rows) {

            var QUANTITY_DEFAULT = 20;
            return $.tableUtils.checkSelectQuantity(rows, QUANTITY_DEFAULT);

        },

        /**
         * 检查选择的数量,默认
         * @param dom
         */
        checkSelectQuantity: function (rows, quantityDefault) {

            if (rows.length < 1 || rows.length > quantityDefault) {
                $.LmisUtils.showMessage($.i18n.prop("title"), "请选择1到" + quantityDefault + "个订单",
                    2000);
                return false;
            }
            return true;

        },


        resetForm: function (dom) {
            dom.form('disableValidation');
            dom.form('clear');
        },

        /**
         * 初始化表格,没有方法
         * @param dom
         * @param menuSetFunc
         * @param columns
         */
        initTableNoMenuSetFunc: function (dom, columns) {
            $.tableUtils.initTable(dom, $.tableUtils.menuSetFunc, columns);
        },

        /**
         * 初始化table,分页
         * @param dom
         * @param menuSetFunc
         * @param columns
         */
        initTable: function (dom, menuSetFunc, columns) {
            if (menuSetFunc == null) {
                menuSetFunc = $.tableUtils.menuSetFunc;
            }
            dom.datagrid({
                method: 'get',
                iconCls: 'icon-reload',
                pagination: true,
                pageSize: 20,
                pageNumber: 0,
                pageSize: 20,
                pageList: [20, 40, 100, 200, 500],
                striped: true,
                rownumbers: true,
                menuId: '#chen_menu',
                menuSetFunc: menuSetFunc,
                columns: columns,
            }).datagrid("columnMoving");
        },

        menuSetFunc: function () {

        },


        /**
         * 初始化table,不分页
         * @param dom
         * @param menuSetFunc
         * @param columns
         */
        initTableUnpage: function (dom, menuSetFunc, columns) {
            dom.datagrid({
                method: 'get',
                iconCls: 'icon-reload',
                pagination: false,
                striped: true,
                rownumbers: true,
                menuId: '#chen_menu',
                menuSetFunc: menuSetFunc,
                columns: columns,
            }).datagrid("columnMoving");
        },

        /**
         * 获取选中的数值,一个
         */
        getCheckedOne: function (tableDom) {
            var dataArray = tableDom.datagrid("getChecked");
            if (dataArray === undefined || dataArray.length == 0) {
                throw   "没有选中值";
            }
            if (dataArray.length > 1) {
                throw   "选中多个值";
            }
            return dataArray[0];

        },

        /**
         * 获取选中的数值,可以为多个
         */
        getChecked: function (tableDom) {
            return tableDom.datagrid("getChecked");
        },

        /**
         * 获取选中行信息
         * @param tableDom
         * @returns {*|jQuery}
         */
        getSelections: function (tableDom) {
            let rows = tableDom.datagrid('getSelections');
            return rows;
        },

        /**
         * 只选中一个
         * @param tableDom
         * @returns {boolean}
         */
        isSelectOne: function (tableDom) {
            var rows = $.tableUtils.getSelections(tableDom);
            if (rows == null || rows.length != 1) {
                return false
            }
            return true;
        },

        /**
         * 不是选中一个
         * @param tableDom
         * @returns {boolean}
         */
        notSelectOne: function (tableDom) {

            return !$.tableUtils.isSelectOne(tableDom);

        },

        /**
         * 删除选中行
         * @param tableDom
         * @returns {*|jQuery}
         */
        deleteSelections: function (tableDom) {

            let selections = $.tableUtils.getSelections(tableDom);
            if (selections) {
                for (let i = 0; i < selections.length; i++) {
                    let selection = selections[i];
                    let selectionIndex = tableDom.datagrid('getRowIndex', selection);
                    tableDom.datagrid('deleteRow', selectionIndex);
                }
            }

        },

        /**
         * table添加一行元素
         * @param tableDom
         * @param data
         */
        appendRow: function (tableDom, data) {

            tableDom.datagrid('appendRow', data);

        },

        /**
         * 更新一行数据
         * @param index
         * @param data
         */
        updateRow: function (tableDom, index, data) {

            tableDom.datagrid("updateRow", {
                index: index, //行索引
                row: data
            });

        },

        /**
         * 更新选中行数据
         * @param index
         * @param data
         */
        updateSelectionsRow: function (tableDom, data) {

            var selections = $.tableUtils.getSelections(tableDom);
            for (var i = 0; i < selections.length; i++) {
                var selection = selections[i];
                var index = $.tableUtils.getRowIndex(tableDom, selection);
                $.tableUtils.updateRow(tableDom, index, data);
            }

        },


        /**
         *  获得行号
         * @param tableDom
         * @param index
         * @param data
         */
        getRowIndex: function (tableDom, data) {

            var index = tableDom.datagrid('getRowIndex', data);
            return index;

        },


        /**
         * 刷新datagrid控件
         *
         * @param gridId
         */
        refresh: function (tableDom) {

            tableDom.datagrid('clearChecked');
            tableDom.datagrid('options').queryParams.Login_SessionId = sessionId;
            tableDom.datagrid("reload");

        },

        totalQuery: function (tableDom, url) {
            tableDom.datagrid('clearChecked');
            tableDom.datagrid('options').url = url;
            var param = new Object();
            param.Login_SessionId = sessionId;
            tableDom.datagrid("load", param);
        },


        /**
         * tableArray中添加元素（字符串）
         * @param array
         * @param field
         * @param title
         */
        arrayPushStr: function (array, field, title) {
            array.push({
                field: field,
                title: title,
                sortable: true,
                width: 135,
                align: 'left'
            });
        },

        /**
         * tableArray中添加元素（字符串）
         * @param array
         * @param field
         * @param title
         */
        arrayPushStrNotSort: function (array, field, title) {
            array.push({
                field: field,
                title: title,
                sortable: false,
                width: 135,
                align: 'left'
            });
        },

        /**
         * 添中隐藏元素
         * @param array
         * @param field
         */
        arrayPushHidden: function (array, field) {
            array.push({
                field: field,
                hidden: true,
            });
        },

        /**
         * tableArray中添加元素（日期）
         * @param array
         * @param field
         * @param title
         */
        arrayPushDate: function (array, field, title) {
            array.push({
                field: field,
                title: title,
                sortable: true,
                width: 140,
                align: 'left',
                formatter: $.DatetimeUtils.formatDateTime
            });
        },

        arrayPushWithFormatter :function (array, field, title, formatter) {
            array.push({
                field: field,
                title: title,
                sortable: false,
                fit: true,
                align: 'left',
                formatter: formatter
            });
        },
        
        /**
         *  是否:0,否:1:是;
         * @param array
         * @param field
         * @param title
         */
        arrayPushWhether: function (array, field, title) {
            array.push({
                field: field,
                title: title,
                sortable: true,
                width: 140,
                align: 'left',
                formatter: $.tableUtils.formatWhether
            });
        },

        /**
         * 是否:0,否:1:是;
         * @param value
         * @returns {string}
         */
        formatWhether: function (value) {
            if ($.StringUtils.isBlank(value) || $.StringUtils.equals(value, '0')) {
                return '否';
            }
            return '是';
        },


        /**
         * 查询的通用方法
         *
         * @param tableDom 如： $('#tableId');
         * @param url
         * @param param 参数
         */
        initTable: function (tableDom, menuSetFunc, columns) {
            tableDom.datagrid({
                method: 'get',
                iconCls: 'icon-reload',
                pagination: true,
                pageSize: 20,
                pageNumber: 0,
                pageSize: 20,
                pageList: [20, 40, 100, 200, 500],
                striped: true,
                rownumbers: true,
                menuSetFunc: menuSetFunc,
                columns: columns,
            }).datagrid("columnMoving");
        },

        /**
         * 查询的通用方法
         *
         * @param tableDom 如： $('#tableId');
         * @param url
         * @param param 参数
         */
        query: function (tableDom, url, param) {
            param.pageSession = sessionId;
            url = url + '?Login_SessionId=' + sessionId
                + '&catch=' + new Date();
            tableDom.datagrid('clearChecked');
            tableDom.datagrid('options').url = url;
            tableDom.datagrid("load", param);
            tableDom.datagrid("clearSelections");
     
        },

        onLoadSuccess: function (tableDom, func) {
            tableDom.datagrid({
                onLoadSuccess: func
            });
        },


        /**
         * 导出
         */
        export: function (tableDom, url) {

            var param = tableDom.datagrid('options').queryParams;
            // 判断是否有查询条件
            if ($.isEmptyObject(param)) {
                $.messager.alert($.i18n.prop("js.common.title.error"),
                    "导出条件为空，无法导出", 'error');
                return;
            }
            var paramJson = JSON.stringify(param);
            window.location.href = url + "?Login_SessionId="
                + sessionId + "&paramJson="
                + encodeURI(paramJson);

        },

        /**
         * 右键菜单按钮可用
         * @param tableDom
         * @param menuDom
         */
        enableItem: function (tableDom, menuDom) {

            tableDom.menu("enableItem", menuDom[0]);
        },

        /**
         * 右键菜单按钮不可用
         * @param tableDom
         * @param tableDom
         * @param menuDom
         */
        disableItem: function (menuDom, itemDom) {

            menuDom.menu("disableItem", itemDom[0]);
        },

        /**
         * 获得安装单详情
         */
        getChanges: function (tableDom) {

            var changesRet = new Array()
            $.tableUtils.addChanges(tableDom, 'updated', changesRet);
            $.tableUtils.addChanges(tableDom, 'deleted', changesRet);
            $.tableUtils.addChanges(tableDom, 'inserted', changesRet);
            return changesRet;

        },

        /**
         * 获得改的行
         */
        addChanges: function (tableDom, changeType, changesRet) {

            var changes = tableDom.datagrid('getChanges', changeType);
            if (changes.length <= 0) {
                return;
            }
            for (var i = 0; i < changes.length; i++) {
                changes[i].changeType = changeType;
                changesRet.push(changes[i]);
            }

        },


        /**
         * 获得所有行
         * @param tableDom
         */
        getRows: function (tableDom) {
            let rows = tableDom.datagrid("getRows");
            return rows;
        },

    };

})(jQuery);
